package com.xxw.springbootencrypt.controller;

import com.xxw.springbootencrypt.annotation.ResponseEncrypt;
import com.xxw.springbootencrypt.bean.Result;
import com.xxw.springbootencrypt.bean.User;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.io.IOException;
import java.util.ArrayList;

@RestController
public class TestController {
    Logger log = LoggerFactory.getLogger(getClass());

    /**
     * 响应数据 加密
     */
    @RequestMapping(value = "/sendResponseEncryData")
    // 响应加密
    @ResponseEncrypt
    public Result sendResponseEncryData() {
        ArrayList<User> userList = new ArrayList<>();
        userList.add(new User("Mr.xiao"));
        return new Result().add("userInfo",userList);
    }

    /**
     * 解密请求参数，并返回解密后的数据
     */
    @RequestMapping(value = "/getRequestData")
    // 当方法参数里面有HttpServeltResponse 时它将不会生效, 使用response返回数据
    public Result getRequestData( @RequestBody Object object) throws IOException, NoSuchFieldException {
        log.info("controller接收的参数object={}", object.toString());
        // 本来不能再用 @ResponseBody ， 否则响应数据会加密，但是不加 @ResponseBody会运行时报错。
        // 使用自定义注解就可以不以@ResponseBody为标准。
        return new Result().add("DecryptData", object);
    }
}

